package com.rpframework.website.device.service;

import java.util.Iterator;
import java.util.List;

import javax.annotation.Resource;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.rpframework.core.BaseService;
import com.rpframework.utils.NumberUtils;
import com.rpframework.utils.Pager;
import com.rpframework.website.device.dao.IGoodsDao;
import com.rpframework.website.device.domain.Goods;
import com.rpframework.website.device.domain.GoodsStock;
import com.rpframework.website.device.util.HConstants;

@Service
public class GoodsService extends BaseService {
	public @Resource IGoodsDao iDao;
	public @Resource GoodsStockService stockService;
	
	public Pager<Goods> getPager(Pager<Goods> pager) {
		long startTime = System.currentTimeMillis();
		List<Goods> list = iDao.doPager(this.packageMyBatisParam(pager));
		for(Iterator<Goods> iter = list.iterator(); iter.hasNext();){
			Goods item = iter.next();
			if(null == item.getId())
				break;
			GoodsStock goodsStock = stockService.searchStock(item.getId(), 0);
			if(goodsStock == null){
				item.setStockAmount(0d);//表示缺货
			}else{
				item.setStockAmount(goodsStock.getAmount());
			} 
		}
		pager.setItemList(list);
		pager.setCostTime(System.currentTimeMillis() - startTime);
		return pager;
	}
	
	/**
	 * 修改状态
	 * @param id
	 * @return
	 * @time 2016年3月24日 上午10:02:46
	 */
	public boolean doUpdateState(Integer id) {
		if(NumberUtils.isValid(id)){
			Goods t = iDao.select(id);
			if(t.getState() == HConstants.EntityState.STATE_NORMAL){
				t.setState(HConstants.EntityState.STATE_DISABLE);
			}else{
				t.setState(HConstants.EntityState.STATE_NORMAL);
			}
			t.setModifyTime(System.currentTimeMillis()/1000);
			return iDao.update(t);
		}
		return false;
	}
	/**
	 * 增加或删除
	 * @param t
	 * @return
	 * @time 2016年3月24日 上午10:17:56
	 */
	public boolean doSaveOrUpdate(Goods t){
		if(t == null) {
			throw new IllegalArgumentException("非法参数!");
		}
		if(StringUtils.isBlank(t.getName())){
			throw new IllegalArgumentException("非法参数!");
		}
		if(NumberUtils.isValid(t.getId())) {
			Goods DBUtils = iDao.select(t.getId());
			Assert.notNull(DBUtils, "更新时找不到实体 " + t.getId());
			if(t.getUrlList()==null){
				t.setUrlList(DBUtils.getUrlList());
			}
			t.setModifyTime(System.currentTimeMillis() / 1000);
			return iDao.update(t);
		}
		t.setCreateTime(System.currentTimeMillis() / 1000);
		return iDao.insert(t);
	}
	/**
	 * 后台添加商品时下拉框
	 * @return
	 * @time 2016年3月31日 下午4:22:18
	 */
	public List<Goods> queryAll() {
		return iDao.queryAll();
	}
	
	/**
	 * 根据商品名查询商品
	 * 用于后台添加商品时不能有重复命名
	 * @param name
	 * @return
	 * @time 2016年4月1日 下午12:31:35
	 */
	public Goods getGoodsByName(String name){
		return iDao.getGoodsByName(name);
	}

	public JsonElement getJsonInfo() {
		JsonObject json = new JsonObject();
		json.addProperty("urlList", "商品滚动图片数组");
		json.addProperty("name", "商品名称");
		json.addProperty("disPrice", "现价");
		json.addProperty("oldPrice", "折扣价");
		json.addProperty("sales", "销量");
		json.addProperty("point", "积分");
		json.addProperty("supplier", "供应商");
		json.addProperty("stock", "库存");
		json.addProperty("info", "商品详情");
		return json;
	}
}
